home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / nt / ntkb.zip / NTKB.EXE / Q102 / 5 / 55.TXT < prev    next >
Text File  |  1993-11-16  |  5KB  |  125 lines

  1. DOCUMENT:Q102555  04-NOV-1993  [W_NT]
  2. TITLE   :How Windows NT Handles Floating-Point Calculations
  3. PRODUCT :Windows NT
  4. PROD/VER:3.10
  5. OPER/SYS:WINDOWS
  6. KEYWORDS:
  7.  
  8. --------------------------------------------------------------
  9. The information in this article applies to:
  10.  
  11.  - Microsoft Windows NT operating system, version 3.1
  12.  - Microsoft Windows NT Advanced Server, version 3.1
  13. --------------------------------------------------------------
  14.  
  15. SUMMARY
  16. =======
  17.  
  18. Each thread has its own general register set (provided by the kernel)
  19. and its own floating-point state. However, the floating-point support
  20. available in a specific instance depends on the subsystem or component
  21. in question. 
  22.  
  23. Below is a list of various components and environments and what type
  24. of floating-point support is present for them.
  25.  
  26. MORE INFORMATION
  27. ================
  28.  
  29. Win32
  30. -----
  31.  
  32. Floating-point support is available to any thread running in the Win32
  33. or POSIX subsystem.
  34.  
  35. This is true even on x86 machines that do not have floating-point
  36. hardware. The floating-point instructions are emulated automatically
  37. for the thread.
  38.  
  39. This feature allows people writing code in higher level languages,
  40. such as C, to assume floating-point support. The compiler generates
  41. the appropriate floating-point machine code. In addition, some
  42. standard floating-point functions allow applications to use
  43. floating-point exceptions in a portable manner. [For more information,
  44. see the header file FPIEE.H and the filter function fpieee_flt().]
  45.  
  46. POSIX
  47. -----
  48.  
  49. Again, POSIX applications can be created with the assumption of
  50. available floating-point support.
  51.  
  52. Note that the POSIX standard does not define a way to enable
  53. floating-point exceptions, so POSIX applications that do so must rely
  54. on some system-specific features. Under Windows NT, a POSIX
  55. application can enable floating exceptions by using _controlfp().
  56. Floating-point exceptions can then be caught by SIGFPE, or, if the
  57. application needs to do more than simply catch the exception, by
  58. fpieee_flt().
  59.  
  60. MS-DOS/WOW: x86
  61. ---------------
  62.  
  63. MS-DOS and WOW applications are run directly by the processor in
  64. virtual-86 mode. An MS-DOS/WOW application has access to the
  65. floating-point hardware just as it would appear in MS-DOS. (If no
  66. floating-point hardware is present, no emulation is provided for the
  67. application.)
  68.  
  69. MS-DOS/WOW: Non-x86
  70. -------------------
  71.  
  72. When run on a RISC-based computer, or other non-x86 machine using the
  73. Windows/NT 80286 emulation code, the 80287 floating-point instructions
  74. are directly emulated. The MS-DOS/WOW application behaves as if an
  75. 80287 processor were present.
  76.  
  77. OS/2 (Supported Only on x86 Versions of Windows NT)
  78. ---------------------------------------------------
  79.  
  80. Floating-point support in this subsystem matches that of OS/2: if
  81. there's no floating-point hardware installed, the OS/2 application is
  82. expected to provide its own emulation.
  83.  
  84. Device Drivers: x86
  85. -------------------
  86.  
  87. On x86 platforms, a driver cannot use the coprocessor. Moreover, using
  88. any floating-point instruction (including fnsave or fwait) in the
  89. driver could cause either corruption of the user's numeric state or a
  90. bug check.
  91.  
  92. Device Drivers: MIPS/Alpha
  93. --------------------------
  94.  
  95. For non-ISR time (that is, execution that does not occur during the
  96. interrupt service routine [ISR]), floating-point support can be
  97. assumed. At ISR time, floating-point support is available so long as
  98. the driver registered the ISR with IoConnectInterrupt and passed
  99. FloatingSave as TRUE. This causes the system to save and restore the
  100. volatile floating-point registers around the associated ISR.
  101.  
  102. Note that these functions on RISC-based computers use floating-point:
  103. RtlFillMemory(), RtlZeroMemory(), RtlCopyMemory(), RtlMoveMemory(). If
  104. an ISR calls any of these functions, it must connect to the interrupt
  105. with FloatingSave=TRUE on a MIPS.
  106.  
  107. Additional reference words: 3.10
  108. KBCategory:
  109. KBSubCategory: 32ap
  110.  
  111. =============================================================================
  112.  
  113. THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS
  114. PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.  MICROSOFT DISCLAIMS
  115. ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES
  116. OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO
  117. EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR
  118. ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
  119. CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF
  120. MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
  121. POSSIBILITY OF SUCH DAMAGES.  SOME STATES DO NOT ALLOW THE EXCLUSION
  122. OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES
  123. SO THE FOREGOING LIMITATION MAY NOT APPLY.
  124.  
  125. Copyright Microsoft Corporation 1993.